package ar.unc.famaf.pln.giveselector.classifier;

import java.util.Set;

import ar.unc.famaf.pln.giveselector.context.Utterance;

/**
 * Interface for Classifier classes. 
 * Given a set of Utterance objects, a Classifier 
 * determines the score of each Occurrence object.
 *
 * @author David Racca ( david.racca@gmail.com )
 *
 */
public interface IClassifier {

	/**
	 * Classify every Occurrence object for each UtteranceP
	 * object that is inside the given set of Utterance objects.
	 * @return the new set of already classified Utterance objects.
	 */
	public Set<Utterance> classifyAll(Set<Utterance> utts);

	/**
	 * Classify each Occurrence of the given Utterance object
	 * @return A new classified UtteranceP object
	 */
	public UtteranceP classify(UtteranceP utt);

	/**
	 * Classify the given occurrence. Note that an Occurrence object
	 * has a list of related Occurrences. This method only
	 * classifies the given instance of the occurrence and not 
	 * the related objects. 
	 * @return A new classified instance for the given Occurrence. 
	 */
	public ClassifiedOccurrence classify(Occurrence occ);

	/**
	 * Returns the score for the given Utterance object.
	 * The score of an Utterance object is computed by
	 * analyzing its list of already classified Occurrence 
	 * objects.
	 * This method should be called after this Utterance
	 * object has been classified.
	 */
	public float getScore(Utterance utt);
}
